// src/main/java/com/yin/waimai/model/Order.java
package com.yin.waimai.model;

import com.yin.waimai.enums.OrderStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单信息 (MongoDB Document)
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "orders")
public class Order {

    @Id
    private String id;

    @Indexed(unique = true) // 订单号唯一且需要索引
    @Field("order_number")
    private String orderNumber;

    @Field("shipper_info")
    private Address shipperInfo; // 嵌入寄件人地址对象

    @Field("recipient_info")
    private Address recipientInfo; // 嵌入收件人地址对象

    @Field("item_description")
    private String itemDescription; // 物品描述 (可选)

    @Field("weight_kg")
    private Double weight; // 重量 (kg)

    @Field("calculated_fee")
    private BigDecimal calculatedFee; // 运费 (使用 BigDecimal 保证精度)

    @Indexed // 按订单状态查询
    @Field("status")
    private OrderStatus status; // 订单整体状态

    @Field("creation_time")
    private LocalDateTime creationTime; // 创建时间

    @Field("pickup_time")
    private LocalDateTime pickupTime; // 揽件时间 (可选)

    @Field("delivery_time")
    private LocalDateTime deliveryTime; // 签收时间 (可选)

    @Indexed // 如果需要按配送员查询订单
    @Field("delivery_person_id")
    private String deliveryPersonId; // 分配的配送员 ID (可选)

    @Indexed // 添加创建者用户名索引，用于查询用户创建的订单
    @Field("creator_username")
    private String creatorUsername; // 创建订单的用户名

    // 可以添加更多字段，如预计送达时间、支付信息等
}